package es.solid.openclose.cajero;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;

public class Menu {

    private static int OPCION_PARA_SALIR = 0;
    private final Map<Integer, Opcion> opciones = new HashMap();

    public Menu(Opcion...opciones) {
        for (Opcion opcion : opciones) {
            this.opciones.put(opcion.numero(), opcion);
        }
    }

    public void presentarMenu() throws IOException {
        int opcionSeleccionada;
        do {
            pintarOpciones();
            opcionSeleccionada = leerOpcionTecleadaPorElUsuario();
            if (opciones.containsKey(opcionSeleccionada)) {
                opciones.get(opcionSeleccionada).ejecutar();
            } 
        } while (opcionSeleccionada != OPCION_PARA_SALIR);
    }

    private void pintarOpciones() {
        System.out.println("CAJERO AUTOMATICO, seleccione una de las siguientes opciones:");
        System.out.println("0) salir");
        for (Opcion opcion : opciones.values()) {
            System.out.println(opcion.numero() + ") " +opcion.textoAMostrar());
        }
    }

    private int leerOpcionTecleadaPorElUsuario() throws IOException {
        return Integer.parseInt(new BufferedReader(new InputStreamReader(System.in)).readLine());
    }
}
